import storage from 'good-storage'

// 由于我们需要缓存搜索历史还有播放历史等等 由于每一个存储都需要定一个 key 我们就定一个变量

// 搜索历史的 key
const SEARCH_KEY = '__search__'
// 最大值缓存50条数据 每次插入的数据都在第一个 定义最大值变量
const SEARCH_MAX_LENGTH = 50

// 播放历史的key
const PLAY_KEY = '__play__'
const PLAY_MAX_LENGTH = 200

// 收藏记录的key
const FAVORITE_KEY = '__favorite__'
const FAVORITE_MAX_LENGTH = 200

// 封装方法 插入的数据总是在最前面 如果数组中有的话 就删除
/**
 *
 * @param {Array} array 需要存储的数组
 * @param {String} value 需要存储的值
 * @param {Function} compare 比较函数
 * @param {Number} maxLen 最大值
 */
function insertArray (array, value, compare, maxLen) {
  // 先查找有没有这个数据
  let index = array.findIndex(compare)
  // index === 0 表示它是第一条数据
  if (index === 0) {
    return false
  }
  // 数组中有这条数据 而且还不是在第一条位置
  if (index > 0) {
    // 把之前的数据删除
    array.splice(index, 1)
  }
  // 插入数据到一条位置
  array.unshift(value)
  // 判断最大长的 看看有没有限制
  if (maxLen && array.length > maxLen) {
    array.pop()
  }
}

// 删除数组中的单个值
/**
 *
 * @param {Array} array - 数组
 * @param {Function} compare - 函数
 */
function deleteFromArray (array, compare) {
  let index = array.findIndex(compare)
  if (index !== -1) {
    array.splice(index, 1)
  } else if (index === -1) {
    console.error('删除历史搜索出现问题')
  }
}

// 把 query 插入 storage 并把最新数组返回
/**
 *
 * @param {String} query - 搜索字符串
 */
export function saveSearch (query) {
  // 获取存储数组 如果没有 就返回空数组 []
  let searches = storage.get(SEARCH_KEY, [])
  insertArray(searches, query, (item, index) => {
    return item === query
  }, SEARCH_MAX_LENGTH)
  // 本地存储
  storage.set(SEARCH_KEY, searches)
  // 返回结果
  return searches
}

// 获取本地缓存
export function loadSearch () {
  return storage.get(SEARCH_KEY, [])
}

// 用户点击 单个删除 搜索历史
export function deleteSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  deleteFromArray(searches, (item, index) => {
    return item === query
  })
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 全部删除搜索历史
export function clearSearch () {
  storage.remove(SEARCH_KEY)
  return []
}

// 存储播放历史
export function savePlay (song) {
  let songs = storage.get(PLAY_KEY, [])
  insertArray(songs, song, (item, index) => {
    return item.id === song.id
  }, PLAY_MAX_LENGTH)
  storage.set(PLAY_KEY, songs)
  return songs
}

// 获取播放历史
export function loadPlay () {
  return storage.get(PLAY_KEY, [])
}

// 用户点击收藏
export function saveFavorite (song) {
  let songs = storage.get(FAVORITE_KEY, [])
  insertArray(songs, song, (item, index) => {
    return item.id === song.id
  }, FAVORITE_MAX_LENGTH)
  storage.set(FAVORITE_KEY, songs)
  return songs
}

// 用户点击取消收藏
export function deleteFavorite (song) {
  let songs = storage.get(FAVORITE_KEY, [])
  deleteFromArray(songs, (item, index) => {
    return item.id === song.id
  })
  storage.set(FAVORITE_KEY, songs)
  return songs
}

// 获取收藏数组
export function loadFavorite () {
  return storage.get(FAVORITE_KEY, [])
}
